﻿

/////////////////////////////////////////////////////////////////////////////////
///              ESCUELA SUPERIOR POLITECNICA DE CHIMBORAZO                   ///
///                        PROYECTO INTEGRADOR IV                             /// 
///                         PROYECTO SICOPS 2011                              /// 
/// ------------------------------------------------------------------------- ///  
///              **********GRUPO DE DESARROLLADORES**********                 ///
///                    ************PEGASO*************                        /// 
///---------------------------------------------------------------------------///
///                                                         RIOBAMBA-ECUADOR  ///
///---------------------------------------------------------------------------///
///Marco Pineda Ingreso principal para el ingreso de bienes y servicios*******///
///---------------------------------------------------------------------------///
///                    FORMULARIO DE INGRESO PRINCIPAL                        ///
/////////////////////////////////////////////////////////////////////////////////





using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Collections;
using LogisticaDeAcceso;

//Formulario principal para el ingreso de pedidos y para el registro de bienes y servicios
//
namespace Aplicacion.Formularios
{
    public partial class frmIngresoPrincipal : Form
    {

        private bool varBandera = true;/////////////////Variable de control para los controles del ingreso de espacios en los casilleros
        private int numBienesIngresadosTotales = 0;/////Variables de documentacion para los ingresos totales de bienes
        private int numBienesIngresados = 0;////////////Variables de documentacion para los ingresos parciales de bienes
        private int numServiciosIngresados = 0;/////////Variables de documentacion para los ingresos totales de servicios
        private int numServiciosIngresadosTotales = 0;//Variables de documentacion para los ingresos parciales de servicios
        private int numPedidos=0;

        private string varNombreCompleto;//////////////Variable donde se encuentra el nombre completo del propietario
        private string varCuenta;//////////////////////Nombre de la cuenta actual
        private string varConexion;////////////////////Variable con la direccion de coneccion, el nombre del base de datos y la cuenta de acceso
        private bool varModificar = false;/////////////Control de salto para el cambio de grpmodificar a grpnormal

        private ArrayList ListaBienes = new ArrayList();///////Variable para los reportes de los bienes ingresados
        private ArrayList ListaDePedidos = new ArrayList();////Variable para los reportes de los servicios ingresados

        private string varNumeroPed;///////////////////////////Registra el numero de pedidos ingresados en una sesion
        private string varEstado;//////////////////////////////Verifica el estado del pedido
        private bool varConfirmar = true;//////////////////////Confirmacion de la generacion de reportes

       

        public frmIngresoPrincipal()
        {
            InitializeComponent();
        }

        public frmIngresoPrincipal(string Nombre, string Cuenta, string Conexion)
        {
            //Ingreso de los nombre del propietario y de la cuenta
            varNombreCompleto = Nombre;
            varCuenta = Cuenta;
            varConexion = Conexion;
            InitializeComponent();

        }
        private void metActualizarServicios()
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            auxCom.metActualizarServiciosIngresoPrin(varConexion,this.coleccionDeDatos1);
        }   

      

      ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      //////////////////////////////////////////////////Inicio de los metodos para el pedido////////////////////////////////


        private void frmIngresoPrincipal_Load(object sender, EventArgs e)
        {
            metInicioPedido();//////////////////////////////////////////Llamado al metodo para ver datos ya ingresados en la base..(En la misma tabla pedido)
            metInicioCentroCostos();////////////////////////////////////Llamado para que se presenten datos de la unidad de adquisiones para ingreso
            ////////////////////////////////////////////////////////////de clves foraneas
            metActualizarServicios();///////////////////////////////////Presentar los datos de los ervicios registrados
            grpRegistroPRSE.Enabled = false;////////////////////////////Se activa el grp de ingreso de pedidos
            tlsNombreCuentaRes.Text = varCuenta;////////////////////////Asignacion de nombres de cuenta acual
            tlsNombreRes.Text = varNombreCompleto;//////////////Asignacion del nombre de propietario de cuenta
            tlsIngresoNormal.PerformClick();////////////////////////////Presionar el estado normal como ingreso por defecto
            metActualizarDatosACPedido();///////////////////////////////Actualiza los datos a modificar

        }

        private void metInicioCentroCostos()
        {
            //inicializacion de alguno de los casilleros del ingreso de pedido
            // entre lgunos de ellos se encuentran los del autorizante, solicitante y custodio
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            auxCom.metInicioCentroCostosIngresoPrin(varConexion, this.coleccionDeDatos1);
        }
        //Inicio para la visualizacion de datos registrados en autorizantes, solicitantes
        private void metInicioPedido()
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            auxCom.metInicioPedidoIngresoPrin(varConexion,this.coleccionDeDatos1);
        }

   

        private void btnNuevoCentro_Click(object sender, EventArgs e)
        {
            Aplicacion.Formularios.frmEmpresa auxFrm = new frmEmpresa(varConexion);
            auxFrm.ShowDialog();/////////////////////////////activa el formulario centro de costos
            coleccionDeDatos1.vs_MostrarUnidadesAd.Clear();//Actualiza el dataset (colecciondedatos1)
            metInicioCentroCostos();/////////////////////////Reinicia la vista del centro de costos
        }

        private void btnNuevaUnidad_Click(object sender, EventArgs e)
        {
            Aplicacion.Formularios.frmDepartamento auxFrm = new frmDepartamento(varConexion);
            auxFrm.ShowDialog();/////////////////////////////Activa el formulario Departamento o de la unidades de adquisicion
            coleccionDeDatos1.vs_MostrarUnidadesAd.Clear();//Actualiza el dataset (colecciondedatos1)
            metInicioCentroCostos();
        }

        private void btnGuardarPE_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea continuar con el registro del nuevo pedido?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                metIngresoPedido();//////////////////////////llamdo al procedimiento almacenado de ingreso
                btnNuevoAC.Enabled = true;
                btnGuardarPE.Enabled = false;
                lblNumeroActual.Text = txtNumeroIPE.Text;//Muestra el numero del perdido asignado por el 
                //motor de la base de datos
                grpRegistroPRSE.Enabled = true;
                grpPedidoPE.Enabled = false;
                numPedidos++;
                tlsTotalPedidosRes.Text = numPedidos.ToString();
                ListaDePedidos.Add(txtNumeroIPE.Text);//Cada se almacena en la base de datos un pedido se registra en esta lista
                // que luego se le emvia al procedimiento para verificar los ultimos ingresos
                metActualizarDatosACPedido();
            }
        }

        private void metIngresoPedido()//metodo de ingreso de nuevos datos en la tabla de pedidos
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            string auxCodigo = coleccionDeDatos1.sp_MostraDepSeleccionados[BindingContext[coleccionDeDatos1, "sp_MostraDepSeleccionados"].Position][1].ToString();//Encuentra la 
            //clave del departamento o unidad adquisitiva
            int num = auxCom.metIngresoPedido(varConexion, auxCodigo, cmbCustodioIPE.Text, cmbSolictanteIPE.Text, cmbAutorizacionIPE.Text, cmbModalidadPE.Text);//activa la vista y devuelve el numero 
            txtNumeroIPE.Text = num.ToString();
            //Activacion del procedimiento de ingreso
            this.coleccionDeDatos1.vs_MostrarAutorizantes.Clear();
            this.coleccionDeDatos1.vs_MostrarCustodios.Clear();
            this.coleccionDeDatos1.vs_MostrarSolicitantes.Clear();
            metInicioPedido();

        }

        private void comCentroPE_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en estos combobox
        }

        private void comUnidadPE_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en estos combobox
        }     
            


        private void metIngresoSoloLetras(KeyPressEventArgs e)
        {
            //Este metodo permite el ingreso de solo letras y controla que no se meta mas de un espacio
            Aplicacion.clsControles.clsControles auxFrm = new Aplicacion.clsControles.clsControles();
            varBandera = auxFrm.metSoloLetras(e, varBandera);
            varBandera = auxFrm.metPrecionarEspacio(e, varBandera);
        }

     

        private void metAceptarPE()//metodo que controla si los combobox tienen datos
        {
            if (metEstaVacio(cmbAutorizacionIPE.Text, 4) == false && metEstaVacio(cmbSolictanteIPE.Text, 4) == false && metEstaVacio(cmbCustodioIPE.Text, 4) == false && metEstaVacio(cmbUnidadIPE.Text,4)==false )
                btnGuardarPE.Enabled = true;//
            else
                btnGuardarPE.Enabled = false;
        }

        private bool metEstaVacio(string tex, int k)//metodo que registra los combobox uno por uno
        {
            bool auxVar = true;
            if (tex.Length >= k)
                auxVar = false;//No esta Vacio
            else
                auxVar = true;//El casillero esta vacio
            return auxVar;

        }

     
        private void metActualizarUnidades()
        {
            ///////////////////////////////////////////////////Metodo actualiza el dataset(colecciondedatos1) para ver los nuevos cambios que se produscan en la tabla
            ///////////////////////////////////////////////////tDepartamento
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            coleccionDeDatos1.sp_MostraDepSeleccionados.Clear();
            auxCom.metActualizarUnidadesIngresoPrin(varConexion, cmbCentroIPE.Text, this.coleccionDeDatos1);
        }

        private void comSolictantePE_KeyPress(object sender, KeyPressEventArgs e)
        {
            metIngresoSoloLetras(e);//Llamado al metodod que controla el ingreso de letras y espacios
        }

        private void comCustodioPE_KeyPress(object sender, KeyPressEventArgs e)
        {
            metIngresoSoloLetras(e);//Llamado al metodod que controla el ingreso de letras y espacios
        }

        private void comAutorizacionPE_KeyPress(object sender, KeyPressEventArgs e)
        {
            metIngresoSoloLetras(e);//Llamado al metodod que controla el ingreso de letras y espacios
        }

      
        private void btnNuevoPE_Click(object sender, EventArgs e)
        {
            //Llamado al metodo para un nuevo ingreso
            metNuevoIngreso();
        }

        private void metNuevoIngreso()
        {
            //Metodo que limpia los datos para un nuevo ingreso
            btnNuevoAC.Enabled = false;
            coleccionDeDatos1.vs_MostrarAutorizantes.Clear();
            coleccionDeDatos1.vs_MostrarCustodios.Clear();
            coleccionDeDatos1.vs_MostrarSolicitantes.Clear();
            metInicioPedido();
            txtNumeroIPE.Clear();
            grpRegistroPRSE.Enabled = false;
            grpPedidoPE.Enabled = true;
            numServiciosIngresados = 0;
            numBienesIngresados = 0;
            tlsBienesRes.Text = numBienesIngresados.ToString();
            tlsServiciosRes.Text = numServiciosIngresados.ToString();
        }

        private void comSolictantePE_SelectedValueChanged(object sender, EventArgs e)
        {
            metAceptarPE();//llamado a la validacion de datos
        }

        private void comSolictantePE_SelectedValueChanged_1(object sender, EventArgs e)
        {
            metAceptarPE();//llamado a la validacion de datos
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        ////////////////////////////////////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////fin del pedido/////////////////////////////////////////////////////////////
     

        private void btnLlamBienes_Click(object sender, EventArgs e)
        {
            //Llamado al metodo de ingreso de bienes
            Aplicacion.Formularios.frmBienes auxLlam = new frmBienes(varConexion);
            coleccionDeDatos1.sp_MostrarBienesPorGrupo.Clear();
            auxLlam.ShowDialog();///////activar el formulario
            metActualizarProducto();////
        }


        private void metActualizarProducto()
        {
            //Control de los detalles del producto con la descripcion de los grupos detallados
            //en el ombobox de grupo
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            auxCom.metActualizarProductoIngresoPrin(varConexion,cmbGrupoProductoRB.Text, this.coleccionDeDatos1);
           
        }  
         

        private void btnEliminarRegistroBien_Click(object sender, EventArgs e)
        {
            //Elimiar fila seleccionada
            DataGridViewRowCollection Mas = this.dgvPantallaDeRegistros.Rows;

            if (dgvPantallaDeRegistros.RowCount != 1)
            {
                if (dgvPantallaDeRegistros.CurrentRow.Index != dgvPantallaDeRegistros.RowCount - 1)
                {
                    Mas.RemoveAt(dgvPantallaDeRegistros.CurrentRow.Index);
                    numBienesIngresadosTotales--;//Contador de todoso los pedidos realizados en una sesion se le resta cuando se elimina de la pantalla de ingresos
                    numBienesIngresados--;//Contador de ingresos solo de cada pedido se le resta con la eliminacion
                    metEnumerarFilasBienes(dgvPantallaDeRegistros);
                    tlsBienesRes.Text = numBienesIngresados.ToString();
                    tlsTotalBienesRes.Text = numBienesIngresadosTotales.ToString();
                    
                }
            }
            if (dgvPantallaDeRegistros.RowCount == 1)
                btnGuardarBienes.Enabled = false;//Si el valor del numero de columnas es uno no se activa el boton de ingreso

        }

        private void metActivarBotonGuardar()//Metodo para activar el boton de guardar o registrar en la base de datos el pedido 
        {                                    // y los bienes ya adjuntados a la misma
            if (numBienesIngresados > 0)
                btnGuardarBienes.Enabled = true;
            else
                btnGuardarBienes.Enabled = false;
        }

        private void btnRegistrarBien_Click(object sender, EventArgs e)
        {
            metIngresarDatoPantalla();
            btnGuardarBienes.Enabled = true;
            btnRegistrarBien.Enabled = false;
            btnNuevoRegistroBien.Enabled = true;
            numBienesIngresadosTotales++;//Contador de todoso los pedidos realizados en una sesion
            numBienesIngresados++;//Contador de ingresos solo de cada pedido
            metLimpiarParaNuevo();//Limpia los datos ya ingresados 
           
        }
        private void metIngresarDatoPantalla()
        {
            //Ingresar datos en el tablero de bienes
            string Numero;
            if (varModificar == false)
                Numero = txtNumeroIPE.Text;
            else
                Numero = cmbNumeroPe.Text;
            String[] ColeccionReg = { "", metGenerarClaveREPR(), cmbCodigoProductoRP.Text, Numero, txtCantidadBienesR.Text, cmbUnidadBienesR.Text, cmbDetalleProductoRp.Text, txtObservacionesBienesR.Text, "INCO" };
            DataGridViewRowCollection Mascara = this.dgvPantallaDeRegistros.Rows;
            Mascara.Add(ColeccionReg);
            metEnumerarFilasBienes(dgvPantallaDeRegistros);
        }

        private void metEnumerarFilasBienes(DataGridView Pantalla)
        {
            //Enumerar las filas ingresadas
          for (int i = 0; i < Pantalla.RowCount - 1; i++)//Van ingresando los datos uno por uno
            Pantalla.Rows[i].Cells[0].Value=(i+1).ToString();                  
        }


        private string metGenerarClaveREPR()
        {
            //Configuracion para general clve para asignar al registr de productos
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            Aplicacion.clsControles.clsControles auxGen = new Aplicacion.clsControles.clsControles();
            return auxGen.GeneracionClaves("R", auxCom.metMostrarRegistrosIngresoPro(varConexion,this.coleccionDeDatos1));//Llamado al metodo que genera una clave
            //Metodo que se encuentra en las clases de acceso
        }

        private void metDatosValidados()
        {
            //Control de datos para la validacion
            if (txtCantidadBienesR.Text.Length >= 1 && txtObservacionesBienesR.Text.Length > 4 && cmbUnidadBienesR.Text.Length > 2 && cmbGrupoProductoRB.Text.Length > 4 && cmbDetalleProductoRp.Text.Length > 4)
            {
                //activcion de los botones para el ingreso de datos en la pantalla de ingresos
                long Num = Convert.ToInt32(txtCantidadBienesR.Text);
                if (Num > 0)
                    btnRegistrarBien.Enabled = true;
                else
                    btnRegistrarBien.Enabled = false;
            }
            else
                btnRegistrarBien.Enabled = false;
       }

        private void textCantidadBienes_Validating(object sender, CancelEventArgs e)
        {
            //Control de ingresos erroneos
            metDatosValidados();
        }

        private void btnNuevoRegistroBien_Click(object sender, EventArgs e)
        {
            metLimpiarParaNuevo();//Limpia la ventana para un nuevo ingreso
            btnNuevoRegistroBien.Enabled = false;

        }

        private void metLimpiarParaNuevo()
        {   
            //Para que los datos no se repitan se les limpia despues de cada ingreso
            // o cuando presiona el boton de nuevo ingreso
            txtCantidadBienesR.Clear();
            txtObservacionesBienesR.Clear();
            txtCantidadBienesR.Focus();
            cmbUnidadBienesR.Text = null;
        }

       

        private void textObservacionesBienes_KeyUp(object sender, KeyEventArgs e)
        {
            metDatosValidados();//Llama al metodo de comprovacion de datos para el registro de los bienes
        }

        private void textCantidadBienes_KeyPress_1(object sender, KeyPressEventArgs e)
        {
            Aplicacion.clsControles.clsControles auxFrm = new Aplicacion.clsControles.clsControles();
            varBandera = auxFrm.metSoloNumeros(e, varBandera);//Controla que solo ingrese numeros
        }

        private void textObservacionesBienes_KeyPress_1(object sender, KeyPressEventArgs e)
        {
            metControlEspacios(e);//Llamado al metodo de control de espacios
           
        }

        private void metControlEspacios(KeyPressEventArgs e)
        {
            Aplicacion.clsControles.clsControles auxFrm = new Aplicacion.clsControles.clsControles();
            varBandera = auxFrm.metControlarEspacios(e, varBandera);//////Controla que el ingreso sea de numeros o de letras
            varBandera = auxFrm.metPrecionarEspacio(e, varBandera);///////Control de espacios para que ingresen mas de un espacio
        }

        private void comUnidadBienes_KeyPress(object sender, KeyPressEventArgs e)
        {
            Aplicacion.clsControles.clsControles auxFrm = new Aplicacion.clsControles.clsControles();
            varBandera = auxFrm.metSoloLetras(e, varBandera);/////////controla que solo ingrese letras
            varBandera = auxFrm.metPrecionarEspacio(e, varBandera);///Controla el ingreso de espacios
            //////////////////////////////////////////////////////////Estos metodo se encuentran en la clase de acceso locales
        }

        private void comGrupoProducto_SelectedValueChanged(object sender, EventArgs e)
        {   
            //////////////////////////////////////////////////////Actualizacion de los datos que se presentan en los acsilleros de control solo 
            coleccionDeDatos1.sp_MostrarBienesPorGrupo.Clear();///de los casilleros de detalle y del codigo de los 
            metActualizarProducto();//////////////////////////////productos registrados
            metDatosValidados();
        }

        private void comCodigoProducto_SelectedValueChanged(object sender, EventArgs e)
        {
            metDatosValidados();//Verificacion de los datos
        }

        private void comDetalleProducto_SelectedValueChanged(object sender, EventArgs e)
        {
            metDatosValidados();//Verificacion de los datos 
        }

        private void comDetalleProducto_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en estos combobox
        }

        private void comGrupoProducto_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en estos combobox
        }

        private void comCodigoProducto_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en estos combobox
        }

        private void btnGuardarBienes_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea continuar con el registro del los bienes especificados?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                metIngresarRegistroPro();//Llamado al metodo de ingreso a la base d datos
                tlsBienesRes.Text = numBienesIngresados.ToString();
                tlsTotalBienesRes.Text = numBienesIngresadosTotales.ToString();
            }
        }
/// ///////////////////////////////////////////////////////////////////////////
/// //////////////////////////////////////////////////////////////////////////
/// Ingresar los datos en la tabla de registro de bienes 
/// 
        private void metIngresarRegistroPro()
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            string Codigo, Producto,  UnidadMedi, Observaciones;/////////////////////////////////////////Variables para el ingreso de variables string
            int CantidaPro, NumeroPedi;//////////////////////////////////////////////////////////////////Variables para el ingreso de enteros en la tabla
            int numServicios=0;//////////////////////////////////////////////////////////////////////////Variable de inicia para el numero de pedidos
            for (int i = 0; i < dgvPantallaDeRegistros.RowCount - 1; i++)////////////////////////////////Van ingresando los datos uno por uno
            {   /////////////////////////////////////////////////////////////////////////////////////////Pero como estamos trabajando en una tabla el recorrido
                Codigo = dgvPantallaDeRegistros.Rows[i].Cells[1].Value.ToString();///////////////////////es de fila en fila
                Producto = dgvPantallaDeRegistros.Rows[i].Cells[2].Value.ToString();/////////////////////Obtener Codigo producto
                NumeroPedi = Convert.ToInt32(dgvPantallaDeRegistros.Rows[i].Cells[3].Value.ToString());//Convertir los datos en enteros
                CantidaPro = Convert.ToInt32(dgvPantallaDeRegistros.Rows[i].Cells[4].Value.ToString());//***********************
                UnidadMedi = dgvPantallaDeRegistros.Rows[i].Cells[5].Value.ToString();///////////////////Obtener la unidad de medida
                Observaciones = dgvPantallaDeRegistros.Rows[i].Cells[7].Value.ToString();////////////////Obtener las observaciones
                auxCom.metIngresarRegistroProducto(varConexion, Codigo, Producto, NumeroPedi, CantidaPro, UnidadMedi, Observaciones);
                numServicios = i+1;/////////////
            }
            MessageBox.Show("Los " + numServicios.ToString() + " bienes se han registrado con éxito.", "Informacion",MessageBoxButtons.OK, MessageBoxIcon.Information);
            //esta funcion debe cambiar cuando se el asigne a un proveedor
            btnNuevoRegistroBien.PerformClick();
            dgvPantallaDeRegistros.Rows.Clear();
            btnGuardarBienes.Enabled = false;

        }

       

        private void btnLlamadoServicio_Click(object sender, EventArgs e)
        {
            Aplicacion.Formularios.frmServicios auxFrm = new frmServicios(varConexion);
            auxFrm.ShowDialog();//Activa el formulario de ingreso de servicios
            coleccionDeDatos1.vs_MostrarServicios.Clear();
            metActualizarServicios();
        }

        private void btnRegistrarRegServicio_Click(object sender, EventArgs e)
        {
            metRegistroServicios();//Llamado eal metodo de ingreso de datos de en la pantalla de Servicios
            numServiciosIngresados++;//Variables para documentacion de los ingresos
            numServiciosIngresadosTotales++;//Varibles de los ingresos totales

        }

        private void metRegistroServicios()
        {
            //Ingresa datos en l pantalla de registros par los servicios
            btnRegistrarRegServicio.Enabled = false;
            string Numero;
            if (varModificar == false)
                Numero = txtNumeroIPE.Text;
            else
                Numero = cmbNumeroPe.Text;
            string auxCodigo = coleccionDeDatos1.vs_MostrarServicios[BindingContext[coleccionDeDatos1, "vs_MostrarServicios"].Position][0].ToString();
            String[] ColeccionReg = { "", metGenerarClaveRS(), auxCodigo, Numero, cmbDetalleServicio.Text, txtObservacionesServicio.Text };
            DataGridViewRowCollection Mascara = this.dgvPantallaDeServicios.Rows;
            Mascara.Add(ColeccionReg);//Comando de ingreso para aderir las filas el la pantalla
            btnNuevoRegistrServicio.Enabled = true;
            btnGuardarServicio.Enabled = true;
            metEnumerarFilasBienes(dgvPantallaDeServicios);//Cuenta el numero de registros pra publicarlo en la pantalla
        }

        private string metGenerarClaveRS()//metodo que se utiliza para la generacion de las claves primarias
        {
            string Var = "";
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            Aplicacion.clsControles.clsControles auxGen = new Aplicacion.clsControles.clsControles();
            Var = auxGen.GeneracionClaves("X", auxCom.metRegistrosFilasIngresoPrin(varConexion,this.coleccionDeDatos1));//Llamado al metodo que genera una clave
            //Metodo que se encuentra en las clases de acceso 
            return Var;
        }

    
        //Ingresa datos en la tabla de registros de servicios.

        private void btnNuevoRegistrServicio_Click(object sender, EventArgs e)
        {
            btnNuevoRegistrServicio.Enabled = false;        
            txtObservacionesServicio.Clear();
            cmbDetalleServicio.Focus();
        }

        private void comDetalleServicio_KeyDown(object sender, KeyEventArgs e)
        {
            e.Handled = true;//IMpide que se ingrese datos en los combos restringidos
        }

        private void btnEliminarRegistroSer_Click(object sender, EventArgs e)
        {
            DataGridViewRowCollection Mas = this.dgvPantallaDeServicios.Rows;
            if (dgvPantallaDeServicios.RowCount != 1)//Si no existen registrados datos en la pantalla no elimina nada
            {
                if (dgvPantallaDeServicios.CurrentRow.Index != dgvPantallaDeServicios.RowCount - 1)//si los datos que el usario quiere eliminar es el no asignado
                {                                                                            //la eliminacion no se lleva acabo   
                    Mas.RemoveAt(dgvPantallaDeServicios.CurrentRow.Index);
                    numServiciosIngresados--;//Se restan los registros locales
                    numServiciosIngresadosTotales--;//Se restan los registros totales
                    metEnumerarFilasBienes(dgvPantallaDeServicios);//Conteo para actualizar el conteo de las filas
                    tlsServiciosRes.Text = numServiciosIngresados.ToString();
                    tlsTotalServiciosRes.Text = numServiciosIngresadosTotales.ToString();
                }
            }
            if (dgvPantallaDeServicios.RowCount == 1)//Si la eliminacion deja sin datos el boton de guardar en la base de datos se deshabilita
                btnGuardarServicio.Enabled = false;
        }

        private void textObservacionesServicio_KeyPress(object sender, KeyPressEventArgs e)
        {
            metControlEspacios(e);//Controla el ingreso de espacios
        }

        private void textObservacionesServicio_KeyUp(object sender, KeyEventArgs e)
        {
            if (txtObservacionesServicio.Text.Length > 5)//Para la pantalla de los eervicios si existen datos se 
                btnRegistrarRegServicio.Enabled = true;//activan los botones de ingreso
            else
                btnRegistrarRegServicio.Enabled = false;//caso contrario se deshabilitan
             
        }

        private void comDetalleServicio_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que ingrese datos en los combos restringidos al usuario
        }

        private void btnGuardarServicio_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea continuar con el registro del los servicios especificados?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            metInsertarServicio();//Llamado al metodo de ingreso par ainsertar en la base los datos registrados
        }
/// //////////////////////////////////////////////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////////////////////////////////////////////
/// Metodo de insertar los servicios en la base
/// 
        private void metInsertarServicio()
        {
            string CodigoRP, CodigoPR, NumeroPed, Observacion;
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            int numBienes=0;
            for (int i = 0; i < dgvPantallaDeServicios.RowCount - 1; i++)//Recorrido del datagriview 
            {                                                         //ingreso de los datos uno por uno                  
                CodigoRP = dgvPantallaDeServicios.Rows[i].Cells[1].Value.ToString();/////Obtener Codigo de registro producto
                CodigoPR = dgvPantallaDeServicios.Rows[i].Cells[2].Value.ToString();/////Obtener Codigo del producto
                NumeroPed = dgvPantallaDeServicios.Rows[i].Cells[3].Value.ToString();////Obtener el numero de pedido
                Observacion = dgvPantallaDeServicios.Rows[i].Cells[5].Value.ToString();//Permite ingresar la observacion
                auxCom.metIngresarRegServicio(varConexion,CodigoRP, CodigoPR, NumeroPed, Observacion);
                numBienes = i+1;
            }
            MessageBox.Show("Los " + numBienes.ToString() + " servicios se han registrado con éxito.", "Informacion", MessageBoxButtons.OK,MessageBoxIcon.Information);
            btnNuevoRegistrServicio.PerformClick();
            dgvPantallaDeServicios.Rows.Clear();
            btnGuardarServicio.Enabled = false;
            tlsServiciosRes.Text = numServiciosIngresados.ToString();//Presenta los vlores en la pantalla
            tlsTotalServiciosRes.Text = numServiciosIngresadosTotales.ToString();//Presneta lo totales en la pantalla
        }

        private void comCentroPE_SelectedValueChanged(object sender, EventArgs e)
        {
            metActualizarUnidades();//Actualizacion de la vista que muestra los datos de los departamentos ingresados 
            metAceptarPE();//Llamdo al validador de ingresos para los datos del pedido
        }

        private void comSolictantePE_KeyUp(object sender, KeyEventArgs e)
        {
            metAceptarPE();//Llamdo al validador de ingresos para los datos del pedido

        }

        private void comboModalidadPE_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que ingrese datos en los combos restringidos al usuario
        }

        private void comboModalidadPE_KeyDown(object sender, KeyEventArgs e)
        {
            e.Handled = true;//Impide que ingrese datos en los combos restringidos al usuario
        }

        private void comUnidadPE_SelectedValueChanged(object sender, EventArgs e)
        {
            metAceptarPE();//Llamdo al validador de ingresos para los datos del pedido
        }

        private void comUnidadBienes_SelectedValueChanged(object sender, EventArgs e)
        {
            metDatosValidados();////Llamdo al validador de ingresos para los datos del registro de bienes
        }

        private void metLlamarReporte()
        {           
            int val1 = Convert.ToInt16(tlsTotalBienesRes.Text);
            int val2 = Convert.ToInt16(tlsTotalPedidosRes.Text);
            int val3 = Convert.ToInt16(tlsTotalServiciosRes.Text);
            if (val2 >= 1 && (val1 >= 1 || val3 >= 1))//Si existe datos suficientes como para crear un informe se podra ingresar
            {// en esta area que permite generar un reporte con los ingreso realizados
                Aplicacion.Reportes.frmIngresosDiarios auxFrm = new Aplicacion.Reportes.frmIngresosDiarios(ListaDePedidos,varConexion,varCuenta,varNombreCompleto);
                auxFrm.ShowDialog();//Activa el formulario de reportes
            } 
            else
            MessageBox.Show("No existen registros de bienes o servicios suficientes para la creación de un informe.", "Informacion",MessageBoxButtons.OK,MessageBoxIcon.Information);
        }

     
        private void toolBtnReportes_Click(object sender, EventArgs e)
        {
            metLlamarReporte();//Llamado directo al metodod que genera los reportes
            varConfirmar = false;
        }
        //Proceso de cerrado
        private void frmIngresoPrincipal_FormClosing(object sender, FormClosingEventArgs e)
        {
            int val1 = Convert.ToInt16(tlsTotalBienesRes.Text);
            int val2 = Convert.ToInt16(tlsTotalPedidosRes.Text);
            int val3 = Convert.ToInt16(tlsTotalServiciosRes.Text);
            if (val2 >= 1 && (val1 >= 1 || val3 >= 1))////Si existe datos suficientes como para crear un informe se podra ingresar
            {
                if (varConfirmar == true)
                {
                    //Al area de reportes
                    DialogResult Men = MessageBox.Show("Desea generar un informe de los ingresos realizados en esta sesión.", "Informacion", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
                    //Se pasa al resultado de la pregunta en forma de variable
                    if (Men == DialogResult.Yes)
                        metLlamarReporte();//Si se alla los datos suficientes y se presiona yes se llama a los reportes
                    if (Men == DialogResult.Cancel)
                        e.Cancel = true;//El proceso de cerrado se cancela 
                }
                else
                {
                    if (MessageBox.Show("¿Esta ventana se está cerrando desea continuar?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                        e.Cancel = true;
                }
            }
            else
            {
                if (MessageBox.Show("¿Esta ventana se está cerrando desea continuar?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                    e.Cancel = true;
            }             
        }
/// 
/// //////////////////////////////////////////////////////////////////////////////////////////////
/// Area de modificaciones de pedidos existentes
/// 

         private void modificarToolStripMenuItem_Click(object sender, EventArgs e)
        {                                    //Bloqueo y desbloqueo de componentes   
            grpPedidoPE.Visible = false;///////grupo de pedidos
            grpActualizarPe.Visible = true;////grupo de actualizacion de pedidos
            btnAtualizarAC.Visible = true;/////boton de actualizacion
            btnGuardarPE.Visible = false;//////boton de guardar el pedido
            btnNuevoAC.Visible = false;////////boton de nuevo ingreso de pedido
            btnIngresosAC.Visible = true;//////boton de ingreso al grupo de registro desde el grp de actualizacion
            varModificar = true;///////////////varable que controla en cual accion esta el usuario en normal o modificacion
            metConcatenarPedidos(cmbNumeroPe.Text,1);//Permite una inter accion entre pedidos modificados y de ingreso normal
            txtObservacionesPe.Enabled = false;
            metAccesos();/////////////////////llama al metodo para el ingreso de pedidos entre los modificados y los de ingreso normal
            btnEliminarPed.Visible = true;////Boton para eliminar pedido visible 

        }

        private void normalToolStripMenuItem_Click(object sender, EventArgs e)
         {                                    //Bloqueo y desbloqueo de componentes 
             grpPedidoPE.Visible = true;////////grupo de pedidos
            grpActualizarPe.Visible = false;////grupo de actualizacion de pedidos
            btnAtualizarAC.Visible = false;/////boton de actualizacion
            btnGuardarPE.Visible = true;////////boton de guardar el pedido
            btnNuevoAC.Visible = true;//////////boton de nuevo ingreso de pedido
            btnIngresosAC.Visible = false;//////boton de ingreso al grupo de registro desde el grp de actualizacion
            varModificar = false;///////////////varable que controla en cual accion esta el usuario en normal o modificacion
            metConcatenarPedidos(txtNumeroIPE.Text, 2);//Permite una inter accion entre pedidos modificados y de ingreso normal
            metAccesos();//llama al metodo para el ingreso de pedidos entre los modificados y los de ingreso normal
            btnEliminarPed.Visible = false;/////ocultar el boton de la eliminacion

        }

        private void metConcatenarPedidos(string Mas,int Num)
        {
            //En este metodo se comprueba que existan validaciones en 
            //la modificacion y en el ingreso normal  
            //para que no existan conflictos en el ingreso  
            if (Mas.Length == 0)                      
            {
                grpRegistroPRSE.Enabled = false;
                lblNumeroActual.Text = "No Asignado";
            }
            else
            {
                grpRegistroPRSE.Enabled = true;
                if (Num == 1)
                {
                    grpRegistroPRSE.Enabled = false;
                    lblNumeroActual.Text = "No Asignado";
                }
                else
                    lblNumeroActual.Text = txtNumeroIPE.Text;
            }
        }
        
 
        private void btnAtualizarPE_Click(object sender, EventArgs e)
        {
            if (txtModalidadPe.Text == "Infima Cuantia" || txtModalidadPe.Text == "Subasta Inversa" || txtModalidadPe.Text == "Menor Cuantia" || txtModalidadPe.Text == "Cotizacion" || txtModalidadPe.Text == "Licitacion")
            {
                varEstado = cmbNuevoEstPe.Text;
                varNumeroPed = cmbNumeroPe.Text;
                metActualizarPedido();//Llamado al actualizador de datos del pedido
            }
            else
                MessageBox.Show("La nueva modalidad registrada no está establecida como una de las validas.\nLas modalidades validas son:\nInfima Cuantia\nSubasta Inversa\nMenor Cuantia\nCotizacion\nLicitacion", "Alerta");
        }

        private void metAccesos()
        {
            if (txtNumeroIPE.Text == varNumeroPed && varEstado == "Inactivo")//Comparacion de los ultimos ingresos en comparacion con la ultima actulizacion
                grpRegistroPRSE.Enabled = false;                             //Si el ultimo dato se actualiza y lo inavilita el grupo de registros se bloquea   
        }
        private void metActualizarPedido()
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            auxCom.metActualizarPedidoIngresoPrin(varConexion, cmbNumeroPe.Text, txtCustodioPe.Text, txtSolicitadoPe.Text, txtAutorizadoPe.Text, txtModalidadPe.Text, cmbNuevoEstPe.Text, txtObservacionesPe.Text + ". Ultima modificacion realizada en la cuenta " + varCuenta);
            metActualizarDatosACPedido();
        }
        private void metActualizarDatosACPedido()
        {
            Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
            coleccionDeDatos1.vs_MostrarPedidos.Clear();
            auxCom.metActualizarDatosACPedidoIngresoPrin(varConexion,this.coleccionDeDatos1);
            //Metodo para actualizar los estados de los datos ingresados en la tabla pedido
        }

        private void comNuevoEstAC_SelectedValueChanged(object sender, EventArgs e)
        {
            if (cmbNuevoEstPe.Text != txtEstadoPe.Text)//Compara si los datos del nuevo estado y del anterior son igulaes
            {                                           //si lo son las observaciones pueden ingresar si no el procedimiento no las registra
                txtObservacionesPe.Enabled = true;
                txtObservacionesPe.Text = "Observaciones:";
                txtObservacionesPe.Focus();
            }
            else
                txtObservacionesPe.Enabled = false;//Control para el ingreso de texto en las observaciones de estado

        }

        private void comNumeroAC_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en el combo box
        }
   

        private void btnIngresosAC_Click(object sender, EventArgs e)
        {
            //Controla que no se active el grupo de registros
            ///Si el mismo se le cambiado el estado de activa a inactivo
            if (txtEstadoPe.Text == "Inactivo")
            {
                grpRegistroPRSE.Enabled = false;//Bloqueo del grupo de registros
                MessageBox.Show("El pedido está inhabilitado, por tanto no puede ingresar en el campo de registros.", "Alerta", MessageBoxButtons.OK, MessageBoxIcon.Information);
                lblNumeroActual.Text = "No Asignado";
            }
            else
            {
                grpRegistroPRSE.Enabled = true;
                lblNumeroActual.Text = cmbNumeroPe.Text;
            }
            ListaDePedidos.Add(cmbNumeroPe.Text);//Se ingresa el numero de los pedidos modificados
        }

        private void comNumeroAC_SelectedValueChanged(object sender, EventArgs e)
        {
           if(varModificar==true)//Solo cuando se trabaje en el grupo de actualizacion de datos se ingresara en esta etapa
            grpRegistroPRSE.Enabled = false;//bloqueando el grupo de ingreso de registros         
        }

        private void bienesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Permite ingresar en el formulario de asignacion de bienes
            Aplicacion.Formularios.frmAsignacionProductos auxFrm = new frmAsignacionProductos(varCuenta, varNombreCompleto, varConexion);
            auxFrm.ShowDialog();
        }

        private void serviciosToolStripMenuItem_Click(object sender, EventArgs e)
        { 
            //Permite ingresar en el formulario de asignacion de servicios
            Aplicacion.Formularios.frmAsignacionServicios auxFrm = new frmAsignacionServicios(varCuenta, varNombreCompleto, varConexion);
            auxFrm.ShowDialog();
        }    


        private void comboModalidadPE_KeyUp(object sender, KeyEventArgs e)
        {
            e.Handled = true;//Impide que se escriba en combo de modalidad
        }

        private void btnModificarUnidPed_Click(object sender, EventArgs e)
        {
            Aplicacion.Formularios.frmActualizarUniDep auxFrm = new frmActualizarUniDep(varConexion, cmbNumeroPe.Text);
            auxFrm.ShowDialog();///////////
            metActualizarDatosACPedido();//Permite modificar las unidades adquisitivas asignadas a un numero de pedido
        }
        //Eliminar el pedido seleccionado
        private void btnEliminarPed_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("¿Desea continuar con la eliminación del actual pedido?", "Atencion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Negocios.ComponeteNegocios auxCom = new Negocios.ComponeteNegocios();
                auxCom.metEliminarPedidoIngresPrin(varConexion, Convert.ToInt32(cmbNumeroPe.Text));
                metActualizarDatosACPedido();
            }
        }

        private void cmbAutorizacionIPE_Click(object sender, EventArgs e)
        {

        }

       
    }
}
